package org.triumphxx.ruletemplate;

import org.triumphxx.ruleelements.BaseRule;
import org.triumphxx.rule.dto.base.RuleDTO;

/**
 * @author:triumphxx
 * @Date: 2024/1/8
 * @Time: 10:48
 * @微信公众号：思考集结处
 * @网站：http://blog.triumphxx.com.cn
 * @GitHub https://github.com/triumphxx
 * @Desc: 规则抽象模板
 **/

public abstract class AbstractRule<T extends RuleDTO> implements BaseRule {
    /**
     * 规则转换器
     *
     * @param dto
     * @param <T>
     * @return
     */
    protected <T> T convert(T dto) {
        return (T) dto;
    }

    /**
     * 规则执行
     *
     * @param ruleDTO
     * @return
     */
    public boolean execute(Object ruleDTO) {
        return executeRule(convert((T)ruleDTO));
    }

    /**
     * 执行规则
     *
     * @param t
     * @param <T>
     * @return
     */
    protected <T> boolean executeRule(T t) {
        return true;
    }
}
